class Solution(object):
    '''
    给你一个整型数组 nums ，在数组中找出由三个数组成的最大乘积，并输出这个乘积。
    思路，三个数组成的最大乘积，数字越大，乘出来的结果就越大。
    1、找到最大的数字
    2、再找到第二大的数组元素， 发现没有，这里其实有一个问题，那就是，如何找到第二大的数组元素并且存储起来呢？
        2、 1 全新的方法来了，我可以给数组排序啊，排序好之后只需要用前三个相乘就可了哈哈哈哈。
            2 排序之后，判断负数的数量有多少，如果是偶数的话，将前2个正数乘，和最后2个负数相乘，然后比大小，获胜的乘积在和下标第2位相乘。
    '''

    def maximumProduct(self, nums):
        # ai 解答
        # 对数组进行排序
        nums.sort()

        # 最大的三个数的乘积
        max1 = nums[-1] * nums[-2] * nums[-3]

        # 最小的两个数和最大的一个数的乘积
        max2 = nums[0] * nums[1] * nums[-1]

        # 返回两者中的较大值
        return max(max1, max2)

        # zheng = 0
        # fu = 0
        # # 久远的回忆，冒泡排序
        # for i in range(len(nums)):  #
        #     # if nums[i] == 0:  # 如果等于0就删除这个元素
        #     #     nums.remove(0)
        #     for j in range(0, (len(nums) - 1) - i):  # 减去排序好的数字，同时最后一位不需要排序。
        #         if nums[j] < nums[j + 1]:  # 开始判断是否大于
        #             # 开始换位
        #             temporary = nums[j]
        #             nums[j] = nums[j + 1]
        #             nums[j + 1] = temporary
        # # 排序好的数组为
        # for i in nums:
        #     # 获取正负数
        #     if i >= 0:
        #         zheng += 1
        #     else:
        #         fu += 1
        #     print(i)
        # # 将前2个正数乘，和最后2个负数相乘，然后比大小
        # maxNum = 0
        # num1 = nums[len(nums) - 1] * nums[len(nums) - 2]  # 负数
        # num2 = nums[0] * nums[1]  # 正数
        # if zheng == 0 or fu == 0:
        #     maxNum = nums[0]
        #     for i in range(1,3):
        #         maxNum *= nums[i]
        #     return maxNum
        # # 最后两位大于最前两位
        # elif num1 > num2:
        #     if nums[0] != None and nums[0] >0:
        #         maxNum = nums[0]
        #         return maxNum * num1
        #     return num1
        # elif num2 > num1:
        #     if nums[2] != None and nums[2] >0 :
        #         maxNum = nums[2]
        #         return maxNum * num2
        #     return num2
        # elif num2 == num1:
        #     maxNum = nums[2]
        #     return maxNum * num2

        # if fu > zheng:
        #     if num1 > num2:
        #         maxNum = nums[0]
        #         return maxNum * num1
        #     else:
        #         maxNum = nums[2]
        #         return maxNum * num2
        # elif zheng == 0:
        #     maxNum = nums[0]
        #     for i in range(1,3):
        #         maxNum *= nums[i]
        #     return maxNum
        # elif fu == 0:
        #     maxNum = nums[0]
        #     for i in range(1, 3):
        #         maxNum *= nums[i]
        #     return maxNum
        # if zheng >= 3:
        #     if num1 > num2:
        #         maxNum = nums[0]
        #         return maxNum * num1
        #     else:
        #         maxNum = nums[2]
        #         return maxNum * num2
        # elif zheng == 2:
        #     maxNum = nums[0]
        #     return maxNum * num1
        # elif zheng == 0:  # 正整数一个没有
        #     maxNum = nums[0]
        #     for i in range(1, 3):
        #         maxNum *= nums[i]
        #     return maxNum
        # elif len(nums) == 3:
        #     maxNum = nums[0] * nums[1] * nums[2]
        # return maxNum


# 测试用例
solution = Solution()  # 实例化对象
nums = [-1000,-1000,1000]
# solution.maximumProduct(nums)
print("最大的乘积为", solution.maximumProduct(nums))
